/**
 * 方式一：
 * 获取枚举值： DEVICE_TYPE_ENUM.FLOWRATE
 * 获取枚举描述： DEVICE_TYPE_ENUM.getDesc('FLOWRATE')
 * 通过枚举值获取描述： DEVICE_TYPE_ENUM.getDescFromValue('FLOWRATE')
 */

/**
 * 创建枚举
 */
function createEnum(definition) {
  const EnumValueMap = {}
  const EnumDescMap = {}
  for (const key of Object.keys(definition)) {
    const [value, desc] = definition[key]
    EnumValueMap[key] = value
    EnumDescMap[value] = desc
  }
  return {
    ...EnumValueMap,
    getDesc(key) {
      return (definition[key] && definition[key][1]) || '无'
    },
    getDescFromValue(value) {
      return EnumDescMap[value] || '无'
    },
  }
}

// 设备类型
export function DEVICE_TYPE_ENUM() {
  return createEnum({
    FLOWRATE: ['FLOWRATE', '流量统计设备'],
    TOUCH_SCREEN: ['TOUCH_SCREEN', '触屏阅读设备'],
    HANDHELD: ['HANDHELD', '掌上阅读设备'],
    VR: ['VR', 'VR设备'],
    AR: ['AR', 'AR设备'],
  })
}

// httpMethod
// export function HTTP_METHOD_ENUM() {
//   return createEnum({
//     GET: ['GET', '查询通常使用此方法'],
//     POST: ['POST', '添加通常使用此方法'],
//     PUT: ['PUT', '修改通常使用此方法'],
//     PATCH: ['PATCH', '修改部分通常使用此方法'],
//     DELETE: ['DELETE', '删除通常使用此方法'],
//   })
// }

/**
 * 方式二：直接定义枚举值
 */
const customEnum = {
  // 设备类型
  DEVICE_TYPE: [
    { value: 'FLOWRATE', label: '流量统计设备' },
    { value: 'TOUCH_SCREEN', label: '触屏阅读设备' },
    { value: 'HANDHELD', label: '掌上阅读设备' },
    { value: 'WEARABLE', label: '穿戴设备' },
  ],
  // 文章状态
  ARTICLE_STATUS: [
    { value: '0', label: '草稿' },
    { value: '1', label: '删除' },
    { value: '2', label: '待审' },
    { value: '3', label: '已审' },
    { value: '4', label: '已签发' },
    { value: '5', label: '未生成' },
    { value: '6', label: '已生成' },
  ],
  // httpMethod
  HTTP_METHOD: [
    { value: 'GET', label: 'GET，查询通常使用此方法' },
    { value: 'POST', label: 'POST，添加通常使用此方法' },
    { value: 'PUT', label: 'PUT，修改通常使用此方法' },
    { value: 'PATCH', label: 'PATCH，修改部分通常使用此方法' },
    { value: 'DELETE', label: 'DELETE，删除通常使用此方法' },
  ],
}

/**
 * 输出枚举
 */
let constants = {
  ...customEnum,
}
let EnumValueMap = {}
let EnumLabelMap = {}

Object.keys(constants).forEach((key) => {
  EnumValueMap[key] = []
  EnumLabelMap[key] = {}
  constants[key].forEach((event) => {
    EnumValueMap[key].push(event)
    EnumLabelMap[key][event.value] = event.label
  })
})

export { EnumValueMap, EnumLabelMap }
